package me.weijing.common.otr;

import java.security.KeyPair;
import java.security.PublicKey;
import java.util.List;

import me.weijing.common.otr.SessionImpl.TLV;

public interface Session {

    public abstract SessionStatus getSessionStatus();

    public abstract SessionID getSessionID();

    public abstract void injectMessage(AbstractMessage m) throws OtrException;

    public abstract KeyPair getLocalKeyPair();

    public abstract OtrPolicy getSessionPolicy();

    public abstract String transformReceiving(String content) throws OtrException;

    public abstract String transformSending(String content, List<TLV> tlvs) throws OtrException;

    public abstract void startSession() throws OtrException;

    public abstract void endSession() throws OtrException;

    public abstract void refreshSession() throws OtrException;

    public abstract PublicKey getRemotePublicKey();

    public abstract void addOtrEngineListener(OtrEngineListener l);

    public abstract void removeOtrEngineListener(OtrEngineListener l);
}
